package unq.uis.robots.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;


import org.uqbar.commons.model.UserException;
import org.uqbar.commons.utils.Observable;

@Observable
public class Jugador implements Serializable{
	private static final long serialVersionUID = 1L;
	public static final String NOMBRE = "nombre";
	public static final String DINERO = "dinero";
	public static final String ROBOTS = "robots";	
	
	private String nombre;
	private int dinero;
	private List<Robot> robots = new ArrayList<Robot>();	
	private Sistema sistema;	

	public Jugador(String nombre,int dinero,List<Robot> robots){
		this.nombre = nombre;
		this.dinero = dinero;
		this.robots.addAll(robots);
		this.sistema = Sistema.getInstance();
		this.setearDuenioARobots();		
		this.sistema.addJugador(this);
	}
	
	public Jugador(String nombre,int dinero){
		this.nombre = nombre;
		this.dinero = dinero;
		this.sistema = Sistema.getInstance();
		this.setearDuenioARobots();		
		this.sistema.addJugador(this);
	}
	
	
	public Jugador() {}
	
	private void setearDuenioARobots(){
		for(Robot robot: this.robots){
			robot.setDuenio(this);
		}
	}	

	public void cobrar(int costo) {
		if (costo > this.getDinero()){
			throw new UserException("No tiene dinero suficiente!");
		}
		this.setDinero(this.getDinero() - costo);	
		//ObservableUtils.forceFirePropertyChanged(this, "dinero", this.getDinero());
	}
	
	public void addRobot(Robot robot){
		this.robots.add(robot);
	}
	
	public List<Robot> getRobots() {
		return robots;
	}
	
	public void setRobots(List<Robot> robots){
		this.robots = robots;
	}
	
	public void setNombre(String nombre){
		this.nombre = nombre;
	}
	
	public String getNombre() {
		return nombre;
	}
	
	public void incrementarDinero(int pesos){
		this.setDinero(this.getDinero()+pesos);
	}
	
	public void setDinero(int pesos){
		this.dinero = pesos;
	}
	
	public int getDinero() {
		return dinero;
	}
	
	public Sistema getSistema() {
		return sistema;
	}	

	@Override
	public String toString() {
		return this.getNombre();
	}

	public void disminuirDinero(int dinero) {
		if (dinero > this.getDinero()){
			throw new UserException("No tiene dinero suficiente!");
		}
		this.setDinero(getDinero() - dinero);
	}

}

